package edu.uoc.tds.cliente;

import edu.uoc.tds.bean.Usuario;
import java.rmi.RemoteException;

import javax.swing.*;

import java.awt.Rectangle;
import javax.swing.JOptionPane;
import edu.uoc.tds.common.RemotoInterface;
import edu.uoc.tds.common.UtilLenguaje;
import edu.uoc.tds.common.Utils;
import edu.uoc.tds.common.Variables;
import edu.uoc.tds.server.GestorDisco;
import edu.uoc.tds.server.GestorUsuario;

public class PantallaContrasena extends javax.swing.JPanel {

    private RemotoInterface objServeis = null;
    private static final long serialVersionUID = 1L;
    private JButton botonAceptar = null;
    private JButton botonCancelar = null;
    private JTextField usuario = null;
    private JPasswordField contrasena = null;
    private UtilLenguaje txt = null;
    private JLabel labelUsuario = null;
    private JLabel labelContrasena = null;
    private Usuario usuarioLogin;

    public PantallaContrasena(RemotoInterface pObjServeis) throws RemoteException {
        super();
        objServeis = pObjServeis;
        initComponents();
    }

    private void initComponents() {

        this.setLayout(null);
        this.setBounds(new Rectangle(0, 0, 800, 300));

        usuario = new JTextField(10);
        usuario.setBounds(new Rectangle(290, 40, 150, 25));
        this.add(usuario);

        labelUsuario = new JLabel();
        labelUsuario.setBounds(new Rectangle(150, 40, 100, 20));
        labelUsuario.setText(txt.getMessage("pantConn.label.usuario"));
        this.add(labelUsuario);

        labelContrasena = new JLabel();
        labelContrasena.setBounds(new Rectangle(150, 80, 100, 20));
        labelContrasena.setText(txt.getMessage("pantConn.label.contrasena"));
        this.add(labelContrasena);

        contrasena = new JPasswordField(10);
        contrasena.setBounds(new Rectangle(290, 80, 150, 25));
        this.add(contrasena);
        this.add(getBotonAceptar(), null);
        this.add(getBotonCancelar(), null);

    }

    private JButton getBotonAceptar() {

        if (botonAceptar == null) {
            botonAceptar = new JButton();
            botonAceptar.setBounds(new Rectangle(290, 120, 150, 30));
            botonAceptar.setText(txt.getMessage("pantConn.boton.aceptar"));
            botonAceptar.addActionListener(new java.awt.event.ActionListener() {

                public void actionPerformed(java.awt.event.ActionEvent e) {
                    Usuario usuarioConn = null;
                    usuarioConn = getUsuarioConectado();

                    if (usuarioConn == null) {
                        JOptionPane.showMessageDialog(null,
                                txt.getMessage("pantConn.error.usuarioNoExiste"),
                                txt.getMessage("pantConn.error"), JOptionPane.WARNING_MESSAGE);
                    } else {

                        PantallaContrasena.this.setVisible(false);
                        Variables.usuarioConectado = usuarioConn;
                        Cliente.menuInici1.setEnabled(false);
                        Cliente.cnnct=true;

                        if (Variables.usuarioConectado.getPerfil() == Variables.administrador) {
                            Cliente.menuMantenimiento.setEnabled(true);
                            Cliente.menuEventos.setEnabled(false);
                            Cliente.menuEstadisticas.setEnabled(false);
                            Cliente.menuInscripciones.setEnabled(false);
                        } else if (Variables.usuarioConectado.getPerfil() == Variables.secretaria) {
                            Cliente.menuEventos.setEnabled(true);
                            Cliente.menuEstadisticas.setEnabled(true);
                            Cliente.menuMantenimiento.setEnabled(false);
                            Cliente.menuInscripciones.setEnabled(false);
                        } else {
                            Cliente.menuInscripciones.setEnabled(true);
                            Cliente.menuMantenimiento.setEnabled(false);
                            Cliente.menuEventos.setEnabled(false);
                            Cliente.menuEstadisticas.setEnabled(false);
                        }
                    }
                }
            });
        }

        return botonAceptar;
    }

    private Usuario getUsuarioConectado() {

        if (Utils.isEmpty(usuario.getText())) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantConn.error.usuarioObligatorio"),
                    txt.getMessage("pantConn.error"), JOptionPane.WARNING_MESSAGE);
            return null;
        } else if (usuario.getText().length() > 10) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantConn.error.usuarioFormatoIncorrecto"),
                    txt.getMessage("pantConn.error"), JOptionPane.ERROR_MESSAGE);
            return null;
        }

        if (Utils.isEmpty(contrasena.getPassword())) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantConn.error.contrasenaObligatoria"),
                    txt.getMessage("pantConn.error"), JOptionPane.WARNING_MESSAGE);
            return null;
        } else if (contrasena.getPassword().length > 10) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("pantConn.error.contrasenaFormatoIncorrecto"),
                    txt.getMessage("pantConn.error"), JOptionPane.ERROR_MESSAGE);
            return null;
        }

        if (!Utils.isEmpty(contrasena.getPassword()) && (!Utils.isEmpty(usuario.getText()))) {
            try {
               // GestorDisco conn = new GestorDisco();
               // conn.initConnection();
               // GestorUsuario gE = new GestorUsuario(conn.getConnection());
                usuarioLogin = objServeis.getUsuarioLogin(usuario.getText(), new String(contrasena.getPassword()));

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("pantConn.error.nok") + "\n" + e.getMessage(),
                        txt.getMessage("pantConn.error"), JOptionPane.ERROR_MESSAGE);
                return null;
            }
        }

        return usuarioLogin;
    }

    private JButton getBotonCancelar() {
        if (botonCancelar == null) {
            botonCancelar = new JButton();
            botonCancelar.setBounds(new Rectangle(130, 120, 150, 30));
            botonCancelar.setText(txt.getMessage("pantConn.boton.cancelar"));
            botonCancelar.addActionListener(new java.awt.event.ActionListener() {

                public void actionPerformed(java.awt.event.ActionEvent e) {
                    try {
                        PantallaContrasena.this.setVisible(false);

                    } catch (Throwable e1) {
                        JOptionPane.showMessageDialog(null,
                                txt.getMessage("pantConn.cancelar.err") + "\n" + e1.getMessage(),
                                txt.getMessage("pantConn.err"), JOptionPane.ERROR_MESSAGE);
                    }
                }
            });
        }
        return botonCancelar;
    }
}
